ENTRY(irq_entries_start)
.rept NR_IRQS
ALIGN
-1: pushl $vector-256
+1: pushl 0x80000000+$vector
jmp common_interrupt
.data
.long 1b
#define BUILD_INTERRUPT(name, nr) \
ENTRY(name) \
- pushl $nr-256; \
+ pushl 0x80000000+$nr; \
SAVE_ALL \
movl %esp,%eax; \
call smp_/**/name; \
*/
fastcall unsigned int do_IRQ(struct pt_regs *regs)
{
- /* high bits used in ret_from_ code */
- int irq = regs->orig_eax & __IRQ_MASK(HARDIRQ_BITS);
+ /* high bit used in ret_from_ code */
+ int irq = regs->orig_eax & __IRQ_MASK(BITS_PER_LONG - 1);
#ifdef CONFIG_4KSTACKS
union irq_ctx *curctx, *irqctx;
u32 *isp;
*/
.macro apicinterrupt num,func
INTR_FRAME
- pushq $\num-256
+ pushq 0x8000000000000000+$\num
CFI_ADJUST_CFA_OFFSET 8
interrupt \func
jmp error_entry
*/
asmlinkage unsigned int do_IRQ(struct pt_regs *regs)
{
- /* high bits used in ret_from_ code */
- int irq = regs->orig_rax & __IRQ_MASK(HARDIRQ_BITS);
+ /* high bit used in ret_from_ code */
+ int irq = regs->orig_rax & __IRQ_MASK(BITS_PER_LONG - 1);
exit_idle();
irq_enter();
#include <asm/idle.h>
#define IRQ_REG orig_rax
#endif
-#define do_IRQ(irq, regs) do { \
- (regs)->IRQ_REG = (irq); \
- do_IRQ((regs)); \
+#define do_IRQ(irq, regs) do { \
+ (regs)->IRQ_REG = (irq) | (1UL << (BITS_PER_LONG - 1)); \
+ do_IRQ((regs)); \
} while (0)
#endif